﻿Imports ComponentFactory.Krypton.Toolkit
Imports Transitions
Imports System.Data.OleDb
Imports WiseLibraries.Net
Imports WiseLibraries.Strings
Imports System.Text

Public Class CadastroCliente
    Inherits KryptonForm

    Private digit As DigitRestrictor
    Private colorCleaner As ComponentColorCleaner
    Private saiJuridico As Transition
    Private saiFisico As Transition
    Private tipoCadastro As String
    Private conexao As OleDbConnection
    Private command As OleDbCommand
    Private dataSet As DataSet
    Private dataAdapter As OleDbDataAdapter
    Private cmdBuilder As OleDbCommandBuilder
    Private cliente As Integer 'Código do cliente (utilizado para modo de edição)
    Private WithEvents webCep As WebCEP
    Private camposErrados As ArrayList 'Para a validação
    Private sb As StringBuilder

#Region "Atributos"
    Private nome As String = Nothing
    Private dataNasc As Date = Nothing
    Private rg As String = Nothing
    Private cpf As String = Nothing
    Private cnpj As String = Nothing
    Private inscEstadual As String = Nothing
    Private ramoAtividade As String = Nothing
    Private profissao As String = Nothing
    Private cep As String = Nothing
    Private log As Integer = Nothing
    Private endereco As String = Nothing
    Private num As Integer = Nothing
    Private comp As String = Nothing
    Private bairro As String = Nothing
    Private cidade As String = Nothing
    Private estado As Integer = Nothing
    Private email As String = Nothing
    Private webSite As String = Nothing
    Private tels() As String = Nothing
#End Region

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        Me.inicializarRestritor() 'Restritor de digitos
        colorCleaner = New ComponentColorCleaner()
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL) 'Recupera a cor quando o texto é editado

        tipoCadastro = "novo"

        Me.carregarEstados()
        Me.carregarRamosDeAtividade()
        Me.carregarLogradouros()

        cbSexo.SelectedIndex = 0
        CBEstado.Text = "SP"
        CBLogradouro.SelectedIndex = 5
        cbRamoAtiv.SelectedIndex = 0
    End Sub

    'Construtor para edição de clientes
    Sub New(ByVal cliente As Integer)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        Me.inicializarRestritor()

        btnLimpar.Visible = False
        btnSalvar.Left = btnLimpar.Left

        tipoCadastro = "editar"
        Me.Text = "Wotan - Edição de cadastro de cliente"
        txtRG.Enabled = False
        txtCPF.Enabled = False
        txtCNPJ.Enabled = False
        Me.carregarEstados()
        Me.carregarRamosDeAtividade()
        Me.carregarLogradouros()

        Me.cliente = cliente

        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Open()
        command = New OleDbCommand("SELECT tblCliente.*, tblEstado.siglaEstado FROM tblCliente INNER JOIN tblEstado ON tblCliente.codEstado = tblEstado.codEstado WHERE codCliente = " & cliente, conexao)
        Dim dr As OleDbDataReader = command.ExecuteReader()

        dr.Read()

        If (dr("codCliente") = cliente) Then
            txtNome.Text = dr("nomeCliente")
            txtEndereco.Text = dr("enderecoCliente")
            txtNumero.Text = dr("numEnderecoCliente")
            txtBairro.Text = dr("bairroCliente")
            txtCidade.Text = dr("cidadeCliente")
            txtCEP.Text = dr("cepCliente")
            cbSexo.SelectedItem = If(dr("sexoCliente").Equals(DBNull.Value), Nothing, dr("sexoCliente"))
            CBEstado.Text = dr("siglaEstado")
            txtRG.Text = If(dr("rgCliente").Equals(DBNull.Value), Nothing, dr("rgCliente"))
            txtCPF.Text = If(dr("cpfCliente").Equals(DBNull.Value), Nothing, dr("cpfCliente"))
            txtProfissao.Text = If(dr("profissaoCliente").Equals(DBNull.Value), Nothing, dr("profissaoCliente"))
            txtComplemento.Text = If(dr("complementoEnderecoCliente").Equals(DBNull.Value), Nothing, dr("complementoEnderecoCliente"))
            txtProfissao.Text = If(dr("profissaoCliente").Equals(DBNull.Value), Nothing, dr("profissaoCliente"))
            txtEmail.Text = If(dr("emailCliente").Equals(DBNull.Value), Nothing, dr("emailCliente"))
            txtSite.Text = If(dr("siteCliente").Equals(DBNull.Value), Nothing, dr("siteCliente"))
            txtCNPJ.Text = If(dr("cnpjCliente").Equals(DBNull.Value), Nothing, dr("cnpjCliente"))
            txtInscEstad.Text = If(dr("inscricaoEstadualCliente").Equals(DBNull.Value), Nothing, dr("inscricaoEstadualCliente"))

        End If

        If (dr("tipoCliente") = "fisico") Then
            rbFisico.Checked = True
        ElseIf (dr("tipoCliente") = "juridico") Then
            rbJuridico.Checked = True
            Me.SuspendLayout()
            Me.inicializarAnimacao()
            saiFisico.run()
            Me.ResumeLayout()
        End If

        rbFisico.Enabled = False
        rbJuridico.Enabled = False

        dr.Close()

        command.CommandText = "SELECT * FROM tblTelefoneCliente WHERE codCliente = " & cliente
        dataAdapter = New OleDbDataAdapter(command)
        dataAdapter.Fill(dataSet, "tblTelefoneCliente")

        For i = 0 To dataSet.Tables("tblTelefoneCliente").Rows.Count - 1
            LBTelefone.Items.Add(dataSet.Tables("tblTelefoneCliente").Rows(i).Item("numTelefoneCliente"))
        Next

        conexao.Close()
    End Sub

    Private Sub inicializarRestritor()
        digit = New DigitRestrictor()
        digit.DefaultCharType = DigitRestrictor.CharType.Numeric
        digit.add(txtNumero)
        digit.add(txtRG)
    End Sub

    Private Sub cadastrarClienteFisico()

        If ramoAtividade = Nothing Then
            ramoAtividade = -1
        End If

        Dim tels(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            tels(i) = LBTelefone.Items(i)
        Next

        Dim sql As String = "INSERT INTO tblCliente(tipoCliente, nomeCliente, sexoCliente, profissaoCliente, enderecoCliente, bairroCliente, codestado, cidadeCliente, numEnderecoCliente, complementoEnderecoCliente, codTipoLogradouro, cepCliente, dataNascCliente, rgCliente, cpfCliente, inscricaoEstadualCliente, cnpjCliente, emailCliente, siteCliente) VALUES('" & _
            "fisico','" & _
            nome & "','" & _
            cbSexo.SelectedItem & "','" & _
            profissao & "','" & _
            endereco & "','" & _
            bairro & "'," & _
            estado & ",'" & _
            cidade & "','" & _
            num & "','" & _
            comp & "'," & _
            log & ",'" & _
            cep & "','" & _
            dataNasc.Date & "','" & _
            rg & "','" & _
            cpf & "','" & _
            inscEstadual & "','" & _
            cnpj & "','" & _
            email & "','" & _
            webSite & "')"

        Try
            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()
        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        End Try

        command.CommandText = "SELECT TOP 1 MAX(codCliente) AS 'ultimo' FROM tblCliente"
        dataAdapter.SelectCommand = command
        dataAdapter.Fill(dataSet, "tblTeste")
        Dim ultimoCodigo As Integer = dataSet.Tables("tblTeste").Rows(0).Item(0)
        Try
            For i = 0 To tels.Length - 1
                command.CommandText = "INSERT INTO tblTelefoneCliente (numTelefoneCliente, codCliente)  VALUES ('" & _
                    tels(i) & "'," & _
                    ultimoCodigo &")"
                command.ExecuteNonQuery()
            Next
        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        End Try

        Debug.WriteLine(sql)

        conexao = FabricaDeConexoes.CriarConexao()
    End Sub

    Private Sub cadastrarClienteJuridico()

        If ramoAtividade = Nothing Then
            ramoAtividade = -1
        End If

        Dim tels(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            tels(i) = LBTelefone.Items(i)
        Next

        Dim sql As String = "INSERT INTO tblCliente(tipoCliente, nomeCliente, sexoCliente, profissaoCliente, enderecoCliente, bairroCliente, codestado, cidadeCliente, numEnderecoCliente, complementoEnderecoCliente, codTipoLogradouro, cepCliente, dataNascCliente, rgCliente, cpfCliente, inscricaoEstadualCliente, cnpjCliente, codRamoAtividade, emailCliente, siteCliente) VALUES('" & _
            "juridico','" & _
            nome & "','" & _
            cbSexo.SelectedItem & "','" & _
            profissao & "','" & _
            endereco & "','" & _
            bairro & "'," & _
            estado & ",'" & _
            cidade & "','" & _
            num & "','" & _
            comp & "'," & _
            log & ",'" & _
            cep & "','" & _
            dataNasc.Date & "','" & _
            rg & "','" & _
            cpf & "','" & _
            inscEstadual & "','" & _
            cnpj & "'," & _
            ramoAtividade & ",'" & _
            email & "','" & _
            webSite & "')"

        Try
            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()
        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        End Try

        command.CommandText = "SELECT TOP 1 MAX(codCliente) AS 'ultimo' FROM tblCliente"
        dataAdapter.SelectCommand = command
        dataAdapter.Fill(dataSet, "tblTeste")
        Dim ultimoCodigo As Integer = dataSet.Tables("tblTeste").Rows(0).Item(0)
        Try
            For i = 0 To tels.Length - 1
                command.CommandText = "INSERT INTO tblTelefoneCliente (numTelefoneCliente, codCliente, codTipoTelefone)  VALUES ('" & _
                    tels(i) & "'," & _
                    ultimoCodigo & "," & _
                    1 & ")"
                command.ExecuteNonQuery()
            Next
        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        End Try

        Debug.WriteLine(sql)

        conexao = FabricaDeConexoes.CriarConexao()
    End Sub

    Private Sub verificarCampos()

        If (sb.Length > 0) Then
            Dim c() As Control
            c = camposErrados.ToArray(GetType(Control))
            Assistente.trocaCorCampos(c, Assistente.COR_ERRO)
            KryptonMessageBox.Show("Há erros nos seguintes campos:" & vbNewLine & sb.ToString() & vbNewLine & "Verifique e tente novamente.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Function validarClienteFisico() As Boolean

        validarCliente()

        If Not (String.IsNullOrEmpty(txtRG.Text)) Then
            rg = Assistente.removePontos(txtRG.Text)
        Else
            camposErrados.Add(txtRG)
            sb.Append("RG" & vbNewLine)
        End If

        If (txtCPF.MaskCompleted And New RegexValidator().validateCpf(Assistente.removePontos(txtCPF.Text))) Then
            cpf = Assistente.removePontos(txtCPF.Text)
        Else
            camposErrados.Add(txtCPF)
            sb.Append("CPF" & vbNewLine)
        End If

        If (DTPDataNasc.Value <> Nothing) Then
            dataNasc = DTPDataNasc.Value
        End If

        If Not (tipoCadastro = "editar") Then
            If (Assistente.contemRegistro("SELECT * FROM tblCliente WHERE cpfCliente = '" & Assistente.removePontos(txtCPF.Text) & "'")) Then
                camposErrados.Add(txtCPF)
                sb.Append("O CPF digitado já está cadastrado" & vbNewLine)
            End If

            If (Assistente.contemRegistro("SELECT * FROM tblCliente WHERE rgCliente = '" & Assistente.removePontos(txtRG.Text) & "'")) Then
                camposErrados.Add(txtRG)
                sb.Append("O RG digitado já está cadastrado" & vbNewLine)
            End If

            If (Assistente.contemRegistro("SELECT * FROM tblCliente WHERE cnpjCliente = '" & txtCNPJ.Text & "'")) Then
                camposErrados.Add(txtRG)
                sb.Append("O CNPJ digitado já está cadastrado" & vbNewLine)
            End If
        End If

        verificarCampos()

        If (sb.Length > 0) Then
            Return (False)
        Else
            Return (True)
        End If

    End Function

    Private Function validarClienteJuridico() As Boolean

        validarCliente()

        If (txtCNPJ.MaskCompleted And New StringValidator().validateCnpj(Assistente.removePontos(txtCNPJ.Text))) Then
            cnpj = Assistente.removePontos(txtCNPJ.Text)
        Else
            camposErrados.Add(txtCNPJ)
            sb.Append("CNPJ" & vbNewLine)
        End If

        If (txtInscEstad.MaskCompleted) Then
            inscEstadual = Assistente.removePontos(txtInscEstad.Text)
        Else
            camposErrados.Add(txtInscEstad)
            sb.Append("Inscrição estadual" & vbNewLine)
        End If

        If (cbRamoAtiv.SelectedItem IsNot Nothing) Then
            ramoAtividade = DirectCast(cbRamoAtiv.SelectedItem, DataRowView).Item("codRamoAtividade")
        End If

        If Not (String.IsNullOrEmpty(txtSite.Text)) Then
            webSite = txtSite.Text
        End If

        verificarCampos()

        If (sb.Length > 0) Then
            Return (False)
        Else
            Return (True)
        End If

    End Function

    Private Sub validarCliente()

        camposErrados = New ArrayList()
        sb = New StringBuilder()

        Dim val As New RegexValidator()

        If (val.validateName(txtNome.Text)) Then
            nome = txtNome.Text
        Else
            camposErrados.Add(txtNome)
            sb.Append("Nome" & vbNewLine)
        End If

        If (txtCEP.MaskCompleted) Then
            cep = Assistente.removePontos(txtCEP.Text)
        Else
            camposErrados.Add(txtCEP)
            sb.Append("CEP" & vbNewLine)
        End If

        If (CBLogradouro.SelectedItem IsNot Nothing) Then
            log = DirectCast(CBLogradouro.SelectedItem, DataRowView).Item("codTipoLogradouro")
        Else
            camposErrados.Add(CBLogradouro)
            sb.Append("Logradouro" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtEndereco.Text)) Then
            endereco = txtEndereco.Text
        Else
            camposErrados.Add(txtEndereco)
            sb.Append("Endereço" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtNumero.Text)) Then
            num = txtNumero.Text
        Else
            camposErrados.Add(txtNumero)
            sb.Append("Número do endereço" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtBairro.Text)) Then
            bairro = txtBairro.Text
        Else
            camposErrados.Add(txtBairro)
            sb.Append("Bairro" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtCidade.Text)) Then
            cidade = txtCidade.Text
        Else
            camposErrados.Add(txtCidade)
            sb.Append("Cidade" & vbNewLine)
        End If

        If (CBEstado.SelectedItem IsNot Nothing) Then
            estado = DirectCast(CBEstado.SelectedItem, DataRowView).Item("codEstado")
        Else
            camposErrados.Add(CBEstado)
            sb.Append("Estado" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtEmail.Text)) Then
            If (val.validateEmail(txtEmail.Text)) Then
                email = txtEmail.Text
            Else
                camposErrados.Add(txtEmail)
                sb.Append("Email" & vbNewLine)
            End If
        End If

        If (LBTelefone.Items.Count > 0) Then
            Dim vetor(LBTelefone.Items.Count - 1) As String
            For i = 0 To vetor.Length - 1
                vetor(i) = LBTelefone.Items(i)
            Next

            tels = vetor
        End If

        profissao = txtProfissao.Text

    End Sub

    Private Sub btnConcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        If (tipoCadastro = "novo") Then
            'Cliente Físico
            If (rbFisico.Checked) Then
                If (validarClienteFisico()) Then
                    cadastrarClienteFisico()
                    KryptonMessageBox.Show("Cliente cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.Dispose()
                End If
            ElseIf (rbJuridico.Checked) Then
                If (validarClienteJuridico()) Then
                    cadastrarClienteJuridico()
                    KryptonMessageBox.Show("Cliente cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.Dispose()
                End If
            End If

        ElseIf (tipoCadastro = "editar") Then

            If (rbFisico.Checked) Then
                If (validarClienteFisico()) Then
                    atualizarCliente()
                    KryptonMessageBox.Show("Cadastro atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.Dispose()
                End If
            ElseIf (rbJuridico.Checked) Then
                If (validarClienteJuridico()) Then
                    atualizarCliente()
                    KryptonMessageBox.Show("Cadastro atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.Dispose()
                End If
            End If
        End If
    End Sub

    Private Sub atualizarCliente()

        Try

            Dim sql = Nothing

            If (inscEstadual IsNot Nothing) Then
                sql = String.Format("UPDATE tblCliente SET nomeCliente = '{0}', profissaoCliente = '{1}', enderecoCliente = '{2}', bairroCliente = '{3}', codestado = {4}, cidadeCliente = '{5}', numEnderecoCliente = '{6}', complementoEnderecoCliente = '{7}', codTipoLogradouro = {8}, cepCliente = '{9}', dataNascCliente = '{10}', rgCliente = '{11}', cpfCliente = '{12}', inscricaoEstadualCliente = '{13}', cnpjCliente = '{14}', codRamoAtividade = {15}, emailCliente = '{16}', siteCliente = '{17}' WHERE codCliente = {18}", _
                            nome, _
                            profissao, _
                            endereco, _
                            bairro, _
                            estado, _
                            cidade, _
                            num, _
                            comp, _
                            log, _
                            cep, _
                            dataNasc.Date, _
                            rg, _
                            cpf, _
                            inscEstadual, _
                            cnpj, _
                            ramoAtividade, _
                            email, _
                            webSite, _
                            cliente)
            Else
                sql = String.Format("UPDATE tblCliente SET nomeCliente = '{0}', profissaoCliente = '{1}', enderecoCliente = '{2}', bairroCliente = '{3}', codestado = {4}, cidadeCliente = '{5}', numEnderecoCliente = '{6}', complementoEnderecoCliente = '{7}', codTipoLogradouro = {8}, cepCliente = '{9}', dataNascCliente = '{10}', rgCliente = '{11}', cpfCliente = '{12}', inscricaoEstadualCliente = '{13}', cnpjCliente = '{14}', emailCliente = '{15}', siteCliente = '{16}', sexoCliente = '{17}' WHERE codCliente = {18}", _
                            nome, _
                            profissao, _
                            endereco, _
                            bairro, _
                            estado, _
                            cidade, _
                            num, _
                            comp, _
                            log, _
                            cep, _
                            dataNasc.Date, _
                            rg, _
                            cpf, _
                            cnpj, _
                            ramoAtividade, _
                            email, _
                            webSite, _
                            cbSexo.SelectedItem, _
                            cliente)
            End If

            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()

            Dim alteracoes As Boolean = False 'Verifica se houve alterações nos telefones

            'Verifica os telefones que devem ser excluídos
            Dim tblIndex As Integer = dataSet.Tables("tblTelefoneCliente").Rows.Count - 1
            Dim listIndex As Integer = LBTelefone.Items.Count - 1

            'Quando não há nenhum telefone na lista
            If (listIndex = -1) Then
                command.CommandText = String.Format("DELETE FROM tblTelefoneCliente WHERE codCliente = {0}", cliente)
                command.ExecuteNonQuery()
            End If

            'Quando há algum telefone na lista
            For i = 0 To tblIndex
                For j = 0 To listIndex
                    If (dataSet.Tables("tblTelefoneCliente").Rows(i).Item("numTelefoneCliente") = LBTelefone.Items(j)) Then
                        Exit For
                    Else
                        If (j = listIndex) Then
                            dataSet.Tables("tblTelefoneCliente").Rows(i).Delete()
                            alteracoes = True 'Houve alterações
                        End If
                    End If
                Next
            Next

            Dim cb = New OleDbCommandBuilder(dataAdapter)
            dataAdapter.Update(dataSet, "tblTelefoneCliente")

            If Not (alteracoes) Then
                Exit Sub 'Se não houve alterações não precisa continuar
            End If

            'Verifica os telefones que devem ser adicionados/gravados
            tblIndex = dataSet.Tables("tblTelefoneCliente").Rows.Count - 1
            listIndex = LBTelefone.Items.Count - 1

            'Quando não há nenhum telefone na lista
            If (tblIndex = -1) Then
                For i = 0 To tels.Length - 1
                    command.CommandText = "INSERT INTO tblTelefoneCliente (numTelefoneCliente, codCliente)  VALUES ('" & _
                        tels(i) & "'," & _
                        cliente & ")"
                    command.ExecuteNonQuery()
                Next
            End If

            'Quando já existem telefones que foram adicionados e removidos
            For i = 0 To listIndex
                For j = 0 To tblIndex
                    Dim telefone As String = dataSet.Tables("tblTelefoneCliente").Rows(j).Item("numTelefoneCliente")
                    If (telefone = LBTelefone.Items(i)) Then
                        Exit For
                    Else
                        Dim sqlTelefone As String = String.Format("INSERT INTO tblTelefoneCliente (numTelefoneCliente, codCliente) VALUES ('{0}', {1})", LBTelefone.Items(i), cliente)
                        command.CommandText = sqlTelefone
                        command.ExecuteNonQuery()
                    End If

                Next
            Next
            dataAdapter.Update(dataSet, "tblTelefoneCliente")

        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        Finally
            conexao.Close()
        End Try

    End Sub

    Private Sub carregarEstados()
        Try
            Dim strQueryEstado As String = "SELECT * FROM tblEstado"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQueryEstado, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblEstado")
            CBEstado.DataSource = dataSet.Tables("tblEstado")
            CBEstado.DisplayMember = "siglaEstado"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    Private Sub carregarRamosDeAtividade()
        Try
            If (dataSet.Tables("tblRamoAtividade") IsNot Nothing) Then
                dataSet.Tables("tblRamoAtividade").Clear()
            End If
            Dim strQueryRamo As String = "SELECT * FROM tblRamoAtividade"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQueryRamo, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataAdapter.Fill(dataSet, "tblRamoAtividade")
            cbRamoAtiv.DataSource = dataSet.Tables("tblRamoAtividade")
            cbRamoAtiv.DisplayMember = "descricaoRamoAtividade"

        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    Private Sub carregarLogradouros()
        Try
            If (dataSet.Tables("tblTipoLogradouro") IsNot Nothing) Then
                dataSet.Tables("tblTipoLogradouro").Clear()
            End If
            Dim strQuerylogradouro As String = "SELECT * FROM tblTipoLogradouro"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQuerylogradouro, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataAdapter.Fill(dataSet, "tblTipoLogradouro")
            CBLogradouro.DataSource = dataSet.Tables("tblTipoLogradouro")
            CBLogradouro.DisplayMember = "descricaoTipoLogradouro"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    Private Sub btnCompletarEndereco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompletarEndereco.Click
        If (txtCEP.MaskCompleted) Then

            webCep = New WebCEP(txtCEP.Text)

            'Se encontrar o cep, preencha os campos
            If (webCep.Resultado = 1) Then
                txtEndereco.Text = webCep.Logradouro
                CBLogradouro.Text = webCep.TipoLogradouro
                txtBairro.Text = webCep.Bairro
                txtCidade.Text = webCep.Cidade
                CBEstado.Text = webCep.UF.ToUpper

            Else
                'Caso contrário, avise
                KryptonMessageBox.Show("Não foi possível encontrar o CEP.", "Ops", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If

        Else
            'Se o cep digitado for incompleto
            KryptonMessageBox.Show("Você deve digitar o CEP por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Sub CBEstado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBEstado.SelectedIndexChanged
        If (CBEstado.SelectedItem IsNot Nothing) Then
            txtInscEstad.Mask = InscricaoEstadual.criarMascara(dataSet.Tables("tblEstado").Rows(CBEstado.SelectedIndex).Item("siglaEstado"))
        End If
    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
        Assistente.limparCampos(Me)
        Assistente.trocaCorTransition(Me)
        txtNome.Focus()
        CBLogradouro.Text = "SP"
        cbSexo.SelectedIndex = 0
        CBLogradouro.SelectedIndex = 5
        cbRamoAtiv.SelectedIndex = 0
    End Sub

    Private Sub btnAdicionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdicionar.Click

        Dim t As String = txtTelefone.Text
        'Transforma os itens do listBox em um vetor string
        Dim itens(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            itens(i) = LBTelefone.Items(i).ToString()
        Next

        'Verifica se é um número de telefone completo e se ainda não existe na lista
        If (txtTelefone.MaskCompleted) Then
            If Not (Assistente.verificarExistencia(t, itens)) Then
                LBTelefone.Items.Add(txtTelefone.Text)

                txtTelefone.Clear()
                txtTelefone.Focus()
            Else
                KryptonMessageBox.Show("O telefone digitado já existe na lista.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Else
            KryptonMessageBox.Show("Você deve digitar o telefone por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click
        If (LBTelefone.SelectedItem IsNot Nothing) Then
            LBTelefone.Items.Remove(LBTelefone.SelectedItem)
        End If
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Dispose()
    End Sub

    Private Sub inicializarAnimacao()
        saiFisico = New Transition(New TransitionType_Acceleration(1000))
        'Sai campos de Cliente Físico
        saiFisico.add(lblDataNasc, "Top", 424)
        saiFisico.add(DTPDataNasc, "Top", 424)
        saiFisico.add(lblRG, "Top", 424)
        saiFisico.add(txtRG, "Top", 424)
        saiFisico.add(lblProfissao, "Top", 475)
        saiFisico.add(txtProfissao, "Top", 475)
        saiFisico.add(txtCPF, "Top", 424)
        saiFisico.add(lblCPF, "Top", 424)
        saiFisico.add(cbSexo, "Top", 450)
        saiFisico.add(lblSexo, "Top", 450)
        'Entra campos Cliente Jurídico
        saiFisico.add(lblCNPJ, "Top", 85)
        saiFisico.add(txtCNPJ, "Top", 85)
        saiFisico.add(lblRamoAtivi, "Top", 58)
        saiFisico.add(cbRamoAtiv, "Top", 58)
        saiFisico.add(bntAddRamoAtiv, "Top", 58)
        saiFisico.add(lblInscEsta, "Top", 85)
        saiFisico.add(txtInscEstad, "Top", 85)
        saiFisico.add(lblEmailCli, "Top", 169)
        saiFisico.add(txtEmail, "Top", 169)
        saiFisico.add(lblSite, "Top", 198)
        saiFisico.add(txtSite, "Top", 198)
        'Fim saiFisico

        'inicio saida de juridico
        saiJuridico = New Transition(New TransitionType_Acceleration(1000))
        'Sai campos juridico
        saiJuridico.add(lblCNPJ, "Top", 424)
        saiJuridico.add(txtCNPJ, "Top", 424)
        saiJuridico.add(lblRamoAtivi, "Top", 424)
        saiJuridico.add(cbRamoAtiv, "Top", 424)
        saiJuridico.add(bntAddRamoAtiv, "Top", 424)
        saiJuridico.add(lblInscEsta, "Top", 450)
        saiJuridico.add(txtInscEstad, "Top", 450)
        saiJuridico.add(lblEmailCli, "Top", 198)
        saiJuridico.add(txtEmail, "Top", 198)
        saiJuridico.add(lblSite, "Top", 509)
        saiJuridico.add(txtSite, "Top", 509)

        'Entra campos cliente Físico
        saiJuridico.add(lblDataNasc, "Top", 58)
        saiJuridico.add(DTPDataNasc, "Top", 58)
        saiJuridico.add(lblRG, "Top", 85)
        saiJuridico.add(txtRG, "Top", 85)
        saiJuridico.add(lblProfissao, "Top", 169)
        saiJuridico.add(txtProfissao, "Top", 169)
        saiJuridico.add(txtCPF, "Top", 85)
        saiJuridico.add(lblCPF, "Top", 85)
        saiJuridico.add(cbSexo, "Top", 85)
        saiJuridico.add(lblSexo, "Top", 85)


    End Sub

    Private Sub rbFisico_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbFisico.CheckedChanged
        If (rbFisico.Checked And Me.Created) Then
            Me.inicializarAnimacao()
            saiJuridico.run()
            Assistente.trocaCorTransition(Me)
        End If
    End Sub

    Private Sub rbJuridico_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbJuridico.CheckedChanged
        If (rbJuridico.Checked And Me.Created) Then
            Me.inicializarAnimacao()
            saiFisico.run()
            Assistente.trocaCorTransition(Me)
        End If
    End Sub

    Private Sub bntAddRamoAtiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntAddRamoAtiv.Click
        Dim editor As New EditorDeTabelaSimples("Adicionar ou remover Ramos de Atividade" _
                                                , conexao _
                                                , "tblRamoAtividade" _
                                                , "descricaoRamoAtividade")
        editor.ShowDialog()

        cbRamoAtiv.DataBindings.Clear()
        cbRamoAtiv.DataSource = Nothing
        cbRamoAtiv.Refresh()

        carregarRamosDeAtividade()
    End Sub

    Private Sub btnAddLogradouro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddLogradouro.Click
        Dim editor As New EditorDeTabelaSimples("Adicionar ou remover Logradouros", conexao, "tblTipoLogradouro", "descricaoTipoLogradouro")
        editor.ShowDialog()
        CBLogradouro.DataBindings.Clear()
        CBLogradouro.DataSource = Nothing
        CBLogradouro.Refresh()

        carregarLogradouros()

    End Sub

    Private Sub txtNome_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNome.KeyPress
        ValidaLetras(txtNome, e)
    End Sub
    Private Sub ValidaNumero(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," Then
            e.Handled = True
        End If
    End Sub

    Private Sub ValidaLetras(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsLetter(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," And Not e.KeyChar = " " Then
            e.Handled = True
        End If
    End Sub

    Private Sub txtNumero_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNumero.KeyPress
        ValidaNumero(txtNumero, e)
    End Sub

    Private Sub txtProfissao_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtProfissao.KeyPress
        ValidaLetras(txtProfissao, e)
    End Sub

    Private Sub txtCidade_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCidade.KeyPress
        ValidaLetras(txtCidade, e)
    End Sub

End Class